package controller;
  
import java.util.List; 
import org.hibernate.HibernateException;
import org.hibernate.Session;

import model.*;
import controller.*;
import util.HibernateUtil;

 
public class KlsUnidadTransporteManager extends HibernateUtil {
	
	private KlsEstadoUnidadTransporte klsEstadoUnidadTransporte;
	private KlsUsuario klsUsuarioCreador;
	private KlsUsuario klsUsuarioModificador;
	private KlsVehiculo klsVehiculo;
	 
    public KlsUnidadTransporte add(KlsUnidadTransporte unidadTransporte, int idUsuarioCreador, int idUsuarioModificador, int idEstadoUnidadTransporte,int idVehiculo) {

    	//unidadTransporteManager.add(getModel(), idUsuarioCreador, idUsuarioModificador, idEstadoUnidadTransporte , idVehiculo);
    	
    	cargarObjetosRelacionados( idUsuarioCreador, idUsuarioModificador, idEstadoUnidadTransporte, idVehiculo);
    	
    	unidadTransporte.setKlsEstadoUnidadTransporte(klsEstadoUnidadTransporte);
    	unidadTransporte.setKlsUsuarioByIdUsuarioCreador(klsUsuarioCreador);
    	unidadTransporte.setKlsUsuarioByIdUsuarioModificador(klsUsuarioModificador);
    	unidadTransporte.setKlsVehiculo(klsVehiculo);
    	    	
    	
    	Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        
        try {
        session.save(unidadTransporte);
        session.getTransaction().commit();
        }
        
        catch (Exception e) {
			// TODO: handle exception
        	e.printStackTrace();
            session.getTransaction().rollback();
		}
        
        return unidadTransporte;
    }

    public KlsUnidadTransporte delete(int idUnidadTransporte) {
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        KlsUnidadTransporte unidadTransporte = null;
        
        try{
        unidadTransporte = (KlsUnidadTransporte) session.get(KlsUnidadTransporte.class, idUnidadTransporte);
        if(null != unidadTransporte) {
            session.delete(unidadTransporte);
        }
        session.getTransaction().commit();
        }
        catch (Exception e) {
			// TODO: handle exception
        	e.printStackTrace();
            session.getTransaction().rollback();
		}
       
        return unidadTransporte;
    }
    
    
      public static List<KlsUnidadTransporte> list() {
     
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        List<KlsUnidadTransporte> unidadesTransporte = null;
        
        try {
             
            unidadesTransporte = session.createQuery("from KlsUnidadTransporte").list();
            session.getTransaction().commit();     
        } catch (HibernateException e) {
            e.printStackTrace();
            session.getTransaction().rollback();
        }
        
        return unidadesTransporte;
    }
    
    
      
    public KlsUnidadTransporte load(int idUnidadTransporte) {
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        KlsUnidadTransporte unidadTransporte = null;
        
        try{
        unidadTransporte = (KlsUnidadTransporte) session.get(KlsUnidadTransporte.class, idUnidadTransporte); 
        session.getTransaction().commit();
        }
        catch (Exception e) {
			// TODO: handle exception
        	e.printStackTrace();
            session.getTransaction().rollback();
		}
        
        return unidadTransporte;
	}
	
    public KlsUnidadTransporte update (KlsUnidadTransporte unidadTransporte, int idUsuarioCreador, int idUsuarioModificador, int idEstadoUnidadTransporte, int idVehiculo) 
    {
    	
    	cargarObjetosRelacionados(idUsuarioCreador, idUsuarioModificador, idEstadoUnidadTransporte, idVehiculo);
    	
    	unidadTransporte.setKlsUsuarioByIdUsuarioCreador(klsUsuarioCreador);
    	unidadTransporte.setKlsUsuarioByIdUsuarioModificador(klsUsuarioModificador);
    	unidadTransporte.setKlsEstadoUnidadTransporte(klsEstadoUnidadTransporte);
    	unidadTransporte.setKlsVehiculo(klsVehiculo);
    	    	
    	Session session = getSessionFactory().getCurrentSession();
        session.getTransaction().begin();
        
        
    	try {
           	session.update(unidadTransporte);
           	session.getTransaction().commit();
        }
    	catch (HibernateException e) {
            e.printStackTrace();
            session.getTransaction().rollback();
        }
        return unidadTransporte;
   }
    
    	
	public KlsUnidadTransporte loadConSesion(int idUnidadTransporte, Session session2) {
        Session session = session2;
        KlsUnidadTransporte klsUnidadTransporte = null;
        
        try{
        klsUnidadTransporte = (KlsUnidadTransporte) session.get(KlsUnidadTransporte.class, idUnidadTransporte); //s
        }
        catch (Exception e) {
			// TODO: handle exception
        	e.printStackTrace();
            session.getTransaction().rollback();
		}
        return klsUnidadTransporte;
	}
    
	
	public KlsEstadoUnidadTransporte getKlsEstadoUnidadTransporte() {
		return klsEstadoUnidadTransporte;
	}

	public void setKlsEstadoUnidadTransporte(
			KlsEstadoUnidadTransporte klsEstadoUnidadTransporte) {
		this.klsEstadoUnidadTransporte = klsEstadoUnidadTransporte;
	}

	public KlsUsuario getKlsUsuarioCreador() {
		return klsUsuarioCreador;
	}

	public void setKlsUsuarioCreador(KlsUsuario klsUsuarioCreador) {
		this.klsUsuarioCreador = klsUsuarioCreador;
	}

	public KlsUsuario getKlsUsuarioModificador() {
		return klsUsuarioModificador;
	}

	public void setKlsUsuarioModificador(KlsUsuario klsUsuarioModificador) {
		this.klsUsuarioModificador = klsUsuarioModificador;
	}
	
	public KlsVehiculo getKlsVehiculo() {
		return klsVehiculo;
	}

	public void setKlsVehiculo(KlsVehiculo klsVehiculo) {
		this.klsVehiculo = klsVehiculo;
	}

	private void cargarObjetosRelacionados( int idUsuarioCreador, int idUsuarioModificador, int idEstadoUnidadTransporte,int idVehiculo) {
		//Managers para cargar objetos
		 
		 KlsUsuarioManager klsUsuarioCreadorManager = new KlsUsuarioManager();
		 KlsUsuarioManager klsUsuarioModificadorManager = new KlsUsuarioManager();
		 KlsEstadoUnidadTransporteManager klsEstadoUnidadTransporteManager = new KlsEstadoUnidadTransporteManager();
		 KlsVehiculoManager klsVehiculoManager = new KlsVehiculoManager();
		  
		 
		//Cargar objetos relacionados
		setKlsEstadoUnidadTransporte(klsEstadoUnidadTransporteManager.load(idEstadoUnidadTransporte));
		setKlsUsuarioCreador(klsUsuarioCreadorManager.load(idUsuarioCreador));
		setKlsUsuarioModificador(klsUsuarioModificadorManager.load(idUsuarioModificador));
		setKlsVehiculo(klsVehiculoManager.load(idVehiculo));
		

	}
    
	


}